package com.mall.generator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import org.springframework.beans.FatalBeanException;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static org.apache.tomcat.util.security.Escape.xml;

// 演示例子，执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
@Component
public class CodeGenerator {
        public static void main(String[] args) {
                List tableNames = new ArrayList();
                //加入pms
//                tableNames.add("pms_brand");
//                tableNames.add("pms_product_attribute");
//                tableNames.add("pms_product_attribute_category");
//                tableNames.add("pms_product_attribute_value");
//                tableNames.add("pms_product_category");
//                tableNames.add("pms_product_category_attribute_relation");
//                tableNames.add("pms_product_full_reduction");
//                tableNames.add("pms_product");
//                tableNames.add("pms_product_full_reduction");
//                tableNames.add("pms_product_vertify_record");
//                tableNames.add("pms_sku_stock");
//                tableNames.add("pms_member_price");


                //加入oms
//                tableNames.add("oms_order");
//                tableNames.add("oms_order_return_apply");
//                tableNames.add("oms_order_return_reason");
//                tableNames.add("oms_order_setting");
//                tableNames.add("oms_company_address");
//                tableNames.add("oms_order_item");

                //加入cms
//                tableNames.add("cms_prefrence_area");
//                tableNames.add("cms_subject");
                String projectPath = System.getProperty("user.dir");
                FastAutoGenerator.create("jdbc:mysql://114.116.124.113:3306/mall", "root", "neu1906mall")
                        .globalConfig(builder -> {
                                builder.author("zzx") // 设置作者
                                        .enableSwagger() // 开启 swagger 模式
                                        .commentDate("yyyy-MM-dd") // 设置时间
                                        .outputDir(projectPath+"\\src\\main\\java"); // 指定输出目录
                        })
                        .packageConfig(builder -> {
                                builder.parent("com") // 设置父包名
                                        .moduleName("mall") // 设置父包模块名
                                        .entity("entity") // 设置实体包名
                                        .service("service") // 设置service包名
                                        .serviceImpl("service.impl") // 设置service实现包名
                                        .mapper("mapper") // 设置mapper包名
                                        .controller("controller") // 设置controller包名
                                        .xml("mapper") // 设置xml包名
                                        .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath+"\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径
                        })
                        .strategyConfig(builder -> {
                                builder.addInclude(tableNames) // 设置需要生成的表名
//                                        .addTablePrefix("pms_","oms_") // 设置过滤表前缀,生成的实体类会没有前缀
                                        .serviceBuilder() // 设置service生成路径
                                        .formatServiceFileName("%sService") // 设置service文件名格式
                                        .formatServiceImplFileName("%sServiceImpl") // 设置service实现类文件名格式
                                        .entityBuilder()
                                        .enableLombok() // 开启lombok模式
//                                        .logicDeleteColumnName("deleted") // 设置逻辑删除字段名
                                        .enableTableFieldAnnotation() // 开启字段注解模式
                                        .controllerBuilder() // 设置controller生成路径
                                        .enableHyphenStyle() // 设置驼峰命名规则
                                        .formatFileName("%sController") // 设置controller文件名格式
                                        .enableRestStyle() // 开启rest风格控制器
                                        .mapperBuilder() // 设置mapper生成路径
                                        .enableBaseResultMap() // 开启baseResultMap
                                        .enableMapperAnnotation() // 开启mapper接口文件注解
                                        //设置mapper文件名格式下划线转驼峰命名
                                        .formatMapperFileName("%sMapper") // 设置mapper文件名格式
                                        .formatXmlFileName("%sMapper"); // 设置xml文件名称
                        })
                        .templateEngine(new VelocityTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                        .execute();
        }
}
